import crypto from "crypto";
import tape from "tape";
import { sha1 } from "../";
var Sha1 = { sha1 }.sha1;
var inputs = [
    ['', 'ascii'],
    ['abc', 'ascii'],
    ['123', 'ascii'],
    ['123456789abcdef123456789abcdef123456789abcdef123456789abcdef', 'ascii'],
    ['123456789abcdef123456789abcdef123456789abcdef123456789abc', 'ascii'],
    ['123456789abcdef123456789abcdef123456789abcdef123456789ab', 'ascii'],
    ['0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde', 'ascii'],
    ['0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', 'ascii'],
    ['foobarbaz', 'ascii']
];
tape("hash is the same as node's crypto", function (t) {
    inputs.forEach(function (v) {
        var a = new Sha1().update(v[0], v[1]).digest('hex');
        var e = crypto.createHash('sha1').update(v[0], v[1]).digest('hex');
        console.log(a, '==', e);
        t.equal(a, e);
    });
    t.end();
});
tape('call update multiple times', function (t) {
    inputs.forEach(function (v) {
        var hash = new Sha1();
        var _hash = crypto.createHash('sha1');
        for (var i = 0; i < v[0].length; i = (i + 1) * 2) {
            var s = v[0].substring(i, (i + 1) * 2);
            hash.update(s, v[1]);
            _hash.update(s, v[1]);
        }
        var a = hash.digest('hex');
        var e = _hash.digest('hex');
        console.log(a, '==', e);
        t.equal(a, e);
    });
    t.end();
});
tape('call update twice', function (t) {
    var _hash = crypto.createHash('sha1');
    var hash = new Sha1();
    _hash.update('foo', 'ascii');
    hash.update('foo', 'ascii');
    _hash.update('bar', 'ascii');
    hash.update('bar', 'ascii');
    _hash.update('baz', 'ascii');
    hash.update('baz', 'ascii');
    var a = hash.digest('hex');
    var e = _hash.digest('hex');
    t.equal(a, e);
    t.end();
});
tape('hex encoding', function (t) {
    inputs.forEach(function (v) {
        var hash = new Sha1();
        var _hash = crypto.createHash('sha1');
        for (var i = 0; i < v[0].length; i = (i + 1) * 2) {
            var s = v[0].substring(i, (i + 1) * 2);
            hash.update(Buffer.from(s, 'ascii').toString('hex'), 'hex');
            _hash.update(Buffer.from(s, 'ascii').toString('hex'), 'hex');
        }
        var a = hash.digest('hex');
        var e = _hash.digest('hex');
        console.log(a, '==', e);
        t.equal(a, e);
    });
    t.end();
});
tape('call digest for more than MAX_UINT32 bits of data', function (t) {
    var _hash = crypto.createHash('sha1');
    var hash = new Sha1();
    var bigData = Buffer.alloc(0x1ffffffff / 8);
    hash.update(bigData);
    _hash.update(bigData);
    var a = hash.digest('hex');
    var e = _hash.digest('hex');
    t.equal(a, e);
    t.end();
});
